

#ifndef __JCFF_STC_8A_GPIO_H
#define __JCFF_STC_8A_GPIO_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "jcff_stc_8a_config.h"

/* Variables type definition     *****************************************************/

typedef enum
{
    GPIO0 = 0,
    GPIO1,
    GPIO2,
    GPIO3,
    GPIO4,
    GPIO5,
    GPIO6,
    GPIO7,  
} GPIO_PortType;


typedef struct 
{
    uint8_t Pin;        /*!< Specifies the GPIO pins to be configured.
                           This parameter can be any value of @ref GPIO_pins_define */
    uint8_t Mode;       /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode_define */
    BOOL Pullup;        /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode_define */
    BOOL EnableSmt;     /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode_define */
} GPIO_InitTypeDef;

typedef enum
{
    GPIO_PIN_RESET = 0,
    GPIO_PIN_SET    
} GPIO_PinState;

/* Common definition     *****************************************************/
/** @defgroup GPIO_pins_define GPIO pins define
  * @{
*/
#define GPIO_PIN_0                 ((uint8_t)0x01)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint8_t)0x02)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint8_t)0x04)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint8_t)0x08)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint8_t)0x10)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint8_t)0x20)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint8_t)0x40)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint8_t)0x80)  /* Pin 7 selected    */
#define GPIO_PIN_ALL               ((uint8_t)0xff)  /* Pin 7 selected    */

/** @defgroup GPIO_mode_define GPIO mode define
  * @brief GPIO Configuration Mode 
  * @{
*/ 
#define  GPIO_MODE_STD_BIDIR                    0x00  /*!< Common standard bidirectional IO Port    */
#define  GPIO_MODE_OUTPUT_PP                    0x01  /*!< Output Push Pull Mode                    */
#define  GPIO_MODE_INPUT_HIGHRES                0x02  /*!< High Resistance Input Mode               */
#define  GPIO_MODE_OUTPUT_OD                    0x04   /*!< Output Open Drain Mode                   */

/* Export functions       *****************************************************/
/* IO operation functions *****************************************************/
RV GPIO_Init(GPIO_PortType GPIOx, GPIO_InitTypeDef *GPIO_Init);
RV GPIO_WriteData(GPIO_PortType GPIOx, uint8_t Val);
uint8_t GPIO_ReadData(GPIO_PortType GPIOx, Val);
RV GPIO_WritePin(GPIO_PortType GPIOx, uint8_t Pin, GPIO_PinState PinState);
GPIO_PinState GPIO_ReadPin(GPIO_PortType GPIOx, uint8_t Pin);

#ifdef __cplusplus
}
#endif

#endif